/**
 * 格式化工具函数
 * Format utility functions
 */

/**
 * 去除字符串两端的空白字符
 * Trim whitespace from both ends of a string
 * @param str 要处理的字符串
 * @returns 处理后的字符串
 */
export const trim = (str: string | undefined | null): string => {
  if (str === null || str === undefined) {
    return '';
  }
  return String(str).trim();
};

/**
 * 格式化日期
 * Format date
 * @param date 日期对象或时间戳
 * @param format 格式字符串，默认为 'YYYY-MM-DD'
 * @returns 格式化后的日期字符串
 */
export const formatDate = (
  date: Date | number | string,
  format: string = 'YYYY-MM-DD',
): string => {
  const d = new Date(date);
  if (isNaN(d.getTime())) {
    return '';
  }

  const year = d.getFullYear();
  const month = String(d.getMonth() + 1).padStart(2, '0');
  const day = String(d.getDate()).padStart(2, '0');

  return format
    .replace('YYYY', String(year))
    .replace('MM', month)
    .replace('DD', day);
};

/**
 * 格式化文件大小
 * Format file size
 * @param bytes 字节数
 * @returns 格式化后的文件大小字符串
 */
export const formatFileSize = (bytes: number): string => {
  if (bytes === 0) return '0 B';

  const k = 1024;
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
  const i = Math.floor(Math.log(bytes) / Math.log(k));

  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
};

/**
 * 格式化数字，添加千分位分隔符
 * Format number with thousand separators
 * @param num 数字
 * @returns 格式化后的数字字符串
 */
export const formatNumber = (num: number): string => {
  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
};
